package reporte.filtros;

import static org.junit.Assert.*;
import org.junit.Before;
import ventas.Venta;

public class FiltroOrVentasTest extends FiltroVentaTest{

	@Before
	public void setUp() throws Exception {
		super.setUp();
		//Hay que realizar demasiados test, no puedo 
		//especificar lo ahora.
		this.setSUT( new FiltroOr<Venta>( 
				new FiltroNot<Venta>(new FiltroTrue<Venta>()),
				new FiltroVentasHastaMonto(1000f)));
	}

	@Override
	public void testDelFiltro() {
		this.filtroOrConMontosIgualAlFiltroTrue( new FiltroAnd<Venta>( 
				new FiltroVentasDesdeMonto(2f),
				new FiltroVentasHastaMonto(3000f)));
		this.filtroOrConFechasIgualAlFiltroTrue(new FiltroOr<Venta>( 
				new FiltroVentasDesdeFecha(fechabase),
				new FiltroVentasDesdeFecha(fechabase)));
		this.filtroOrConProductosIgualAFiltroTrue();
	}

	public void filtroOrConMontosIgualAlFiltroTrue(Filtro<Venta> sut){
		//No importa los montos, siempre sera verdad
		assertArrayEquals(lista.toArray(),sut.filtrar(lista).toArray());
	}
	
	public void filtroOrConFechasIgualAlFiltroTrue(Filtro<Venta> sut){
		//Esto funciona mientras que la fecha base no coincida con alguna fecha extremo
		assertArrayEquals(lista.toArray(),sut.filtrar(lista).toArray());
	}
	
	public void filtroOrConProductosIgualAFiltroTrue(){
		Filtro<Venta> filtroProducto = new FiltroVentasPorProducto(productoABuscar), 
				filtroventa = new FiltroOr<Venta>( filtroProducto,
					new FiltroNot<Venta>( filtroProducto ));
		//No importa el contenido, dara lo mismo.
		assertArrayEquals(lista.toArray(),filtroventa.filtrar(lista).toArray());
	}
	
	@Override
	public void testDeLaCondicion() {
	}

}
